Snowflake AI & ML ML Functionsのリソースを作る際の権限を確認した
データ事業本部 機械学習チームの鈴木です。
Snowflake AI & MLのML Functionsのリソースについて、いざ細かい権限設定をする際、何の権限があればリソースを作成ができるのか調べたので、非常に簡単にですがご紹介します。
記事執筆時点だと、ML Functionsのリソースは作成結果がSnowsightから見えないと思いますので、細かい権限制御をする際のイメージの参考になりましたら幸いです。
Snowflake AI & MLのML Functionsとは
概要について
Snowflake AI & MLの1機能で、機械学習による分析や推論を担うものとなっています。
Snowflakeにおける機械学習の機能としては、ほかにSnowpark MLがありますが、あちらはPythonスクリプトを記述して従来通りモデルを開発していくイメージであるのに対して、ML FunctionsはSQLを使って誰でも簡単に機械学習のモデル開発・利用ができる代わりに、ある程度用途や使い方が決まっているものになります。
現状は以下の機能があります。
- 異常検出
- 時系列予測
- 分類(パブリックプレビュー)
- 要因分析(パブリックプレビュー)
作成されるリソースについて
ここでは私がよく使う時系列予測機能を例に記載します。
時系列予測機能は、以下のブログで紹介しているように、CREATE SNOWFLAKE.ML.FORECAST
を実行することにより、モデルを作成することができます。
作成したモデルは、SHOW SNOWFLAKE.ML.FORECAST
を実行することで確認できますが、その詳細から分かるように、スキーマに作成されています。
よって、時系列予測機能を使ってモデルを作成する場合、スキーマに対するモデル作成の権限が必要になります。
必要な権限について
スキーマにモデル作成の権限が必要であることが分かったので、スキーマの権限のうち、ML Functionsに関するものを確認すると、以下があることが分かります。
- CREATE SNOWFLAKE.ML.ANOMALY_DETECTION
- CREATE SNOWFLAKE.ML.CLASSIFICATION
- CREATE SNOWFLAKE.ML.FORECAST
- CREATE SNOWFLAKE.ML.TOP_INSIGHTS
次では、時系列予測を例に、CREATE SNOWFLAKE.ML.FORECAST
の権限の有無で、時系列予測モデルの作成権限が制御できることを確認します。
やってみた
前提
モデル作成用のデータが必要なため、以下のガイドを参考に、新しく作成したCM_NAYUTS
ロールで単一時系列予測用のデータが読み出せるビューを作成しておきました。
このとき、CM_NAYUTS
ロールには以下の権限をつけておきました。ウェアハウス・データベース・スキーマは事前に作成済みとします。
-- 検証用のWH・データベース・スキーマを使うための権限を追加
GRANT USAGE ON warehouse ML_WH TO ROLE CM_NAYUTS;
GRANT USAGE ON DATABASE DA_ML_DB TO ROLE CM_NAYUTS;
GRANT USAGE ON SCHEMA DA_ML_DB.PRIVILEGE_TEST_SCHEMA TO ROLE CM_NAYUTS;
-- NOTEBOOKから作業したかったので作成権限を追加
GRANT CREATE NOTEBOOK ON SCHEMA DA_ML_DB.PRIVILEGE_TEST_SCHEMA TO ROLE CM_NAYUTS;
-- テーブルおよびビューの作成権限を追加
GRANT CREATE TABLE ON SCHEMA DA_ML_DB.PRIVILEGE_TEST_SCHEMA TO ROLE CM_NAYUTS;
GRANT CREATE VIEW ON SCHEMA DA_ML_DB.PRIVILEGE_TEST_SCHEMA TO ROLE CM_NAYUTS;
CREATE SNOWFLAKE.ML.FORECAST権限付与による挙動の違い
CREATE SNOWFLAKE.ML.FORECAST
権限を付与してみて、モデルが作成できるようになることを確認しました。
まず、以下のSQLを実行し、モデルが作れないことを確認しました。作業はNOTEBOOKから実行しています。
CREATE SNOWFLAKE.ML.FORECAST model1(
INPUT_DATA => TABLE(v1),
TIMESTAMP_COLNAME => 'date',
TARGET_COLNAME => 'sales'
);
以下のように権限が不足しているエラーが発生しました。
続いて、以下のようにロールに権限を追加してから、再度モデルを作成し、成功することを確認しました。
GRANT CREATE SNOWFLAKE.ML.FORECAST ON SCHEMA DA_ML_DB.PRIVILEGE_TEST_SCHEMA TO ROLE CM_NAYUTS;
最後に
スキーマに対して、対応するモデル作成の権限を付与することで、ML Functionsの機能の実行を権限制御できることを確認しました。
参考になりましたら幸いです。